using System;
using Heaven.Mathematics;
using Heaven.Engine.Serialization;

namespace Heaven.Engine.Transformations
{
    /// <summary>
    /// Represents a transformation interface
    /// </summary>
    public interface ITransformation
    {
        /// <summary>
        /// This matrix holds the result 
        /// of this transformation
        /// </summary>
        Matrix4 Value
        {
            get;
        }

        /// <summary>
        /// Occurs when this transformation 
        /// has been changed
        /// </summary>
        event EventHandler Changed;

        /// <summary>
        /// Serializes to the output serializer
        /// </summary>
        /// <param name="serializer">The output serializer</param>
        void Serialize(Serializer serializer);

        /// <summary>
        /// Deserializes
        /// </summary>
        /// <param name="serializer">The input serializer</param>
        void Desrialize(Deserializer deserializer);
    }
}
